package br.uece.ativcomplementares.beans;

import java.io.Serializable;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.context.FacesContext;

import org.primefaces.event.SelectEvent;
import org.primefaces.event.ToggleEvent;

import br.uece.ativcomplementares.business.AtividadeAlunoBO;
import br.uece.ativcomplementares.dao.AtividadeAlunoDao;
import br.uece.ativcomplementares.dto.DashBoardAlunoDTO;
import br.uece.ativcomplementares.dto.ListaDashboard;
import br.uece.ativcomplementares.entity.Aluno;
import br.uece.ativcomplementares.entity.AtividadeAluno;
import br.uece.ativcomplementares.entity.Periodo;
import br.uece.ativcomplementares.entity.Usuario;
import br.uece.ativcomplementares.enums.PerfilEnum;
import br.uece.ativcomplementares.enums.StatusAtividade;

public class DashboardBean extends AbstractBean implements Serializable {

	private static final long serialVersionUID = -8541357128043522063L;
	
	private AtividadeAlunoBO ativAlunoBusiness;
	private Usuario usuario;
	
	/* Filtros */
	private Aluno aluno;
	private Periodo periodo;
	
	private ListaDashboard listaDashboardDto;
	private List<AtividadeAluno> atividadesDoAluno;

	private int sumHorasCursadas;

	public DashboardBean() {
		ativAlunoBusiness = new AtividadeAlunoBO(new AtividadeAlunoDao());
		periodo = null;
	}

	@PostConstruct
	public void init() {
		if (usuario.getPerfil() == PerfilEnum.Aluno) {
			aluno = usuario.getAluno();
			selecionarAluno(aluno);
		}
	}
	
	public void listarAtividades(ToggleEvent event) {
		DashBoardAlunoDTO dto = (DashBoardAlunoDTO) event.getData();
		atividadesDoAluno = ativAlunoBusiness.listarAtividades(aluno, dto.getId());
	}
	
	public void autocompleteSelect(SelectEvent event) {
		selecionarAluno((Aluno) event.getObject());
	}
	
	public void selecionarAluno(Aluno aluno) {
		listaDashboardDto = ativAlunoBusiness.listarAtividadesComplementaresComHoras(aluno);
		atividadesDoAluno = null;
	}
	
	public boolean renderStatusAguardando(AtividadeAluno atividadeAluno) {
		return atividadeAluno.getStatus() == StatusAtividade.AGUARDANDO_APROVACAO;
	}
	
	public String redirecionarAtividade(AtividadeAluno atividadeAluno) {
	    FacesContext.getCurrentInstance().getExternalContext().getFlash()
		        .put("idAtividadeAluno", atividadeAluno.getId());
		
		return "atividades/" + atividadeAluno.getView() + ".jsf?faces-redirect=true&codAtividade=" + atividadeAluno.getAtividade().getId();
	}
	
	public List<AtividadeAluno> getAtividadesDoAluno() {
		return atividadesDoAluno;
	}

	public Aluno getAluno() {
		return aluno;
	}

	public void setAluno(Aluno aluno) {
		this.aluno = aluno;
	}

	public Periodo getPeriodo() {
		return periodo;
	}

	public void setPeriodo(Periodo periodo) {
		this.periodo = periodo;
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public int getSumHorasCursadas() {
		return sumHorasCursadas;
	}

	public ListaDashboard getListaDashboardDto() {
		return listaDashboardDto;
	}

}
